//
//  UserAccountViewModel.swift
//  WKweiBo
//
//  Created by 阿拉斯加的狗 on 15/12/9.
//  Copyright © 2015年 阿拉斯加的🐶. All rights reserved.
//

import Foundation


//定义一个UserAccountViewModel的类
class UserAccountViewModel{

    //定义单例
    static let sharedUserAccount: UserAccountViewModel = UserAccountViewModel()
    
    //定义一个记录登陆是否成功的属性
    var userLogin: Bool {
    
        return account?.access_token != nil && !isExpired
    
    }
    
    /// 返回有效的 token
    var accessToken: String? {
        
        // 如果 token 没有过期，返回 account.中的 token 属性
        if !isExpired {
            return account?.access_token
        }
        return nil
    }
    

    //定义一个模型属性
    var account: UserAccount?
    
    //头像  URL
    var userAvatarUrl: NSURL {
    
        return NSURL(string: account?.avatar_large ?? "")!
        
    }

    //归档保存属性的路径记录
    private var accountPath: String {
    
    
        let path = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).last!
        
        //拼接路径
        return (path as NSString).stringByAppendingString("account.plist")
        
    
    }


    //判断用户是否过期
    private var isExpired: Bool {
    
        //比较两个日期
        if account?.expiresDate?.compare(NSDate()) == NSComparisonResult.OrderedDescending {
        
            return false
        
        }
    
        //过期直接返回
        return true
    }
    
    
/// 构造函数
    init() {
    
        //从沙盒中获取数据
        account = NSKeyedUnarchiver.unarchiveObjectWithFile(accountPath) as? UserAccount
    
        //判断token是否过期
        if isExpired {
        
            print("已过期")
            
            account = nil
        
        }
        print(account)
    }
}

extension UserAccountViewModel {

    //加载token并且获取用户资源数据
    func loadAccessToken(code: String, finished: (isSuccessed: Bool) ->()) {
    
        //加载 accessToken
        NetworkTools.sharedTools.loadAccessToken(code) { (result, error) -> () in
            
            if error != nil {
                
                print("出错了")
                
                finished(isSuccessed: false)
                
                return
                
            }
            
            
            print(result)
            //获取模型数据
            self.account = UserAccount(dict: result as! [String: AnyObject])
            
            //加载数据
            self.loadUserInfo(self.account!,finished:finished)

    
        }
    
    
    }
    
    
    
    /// 加载用户信息
    ///
    /// - parameter account: 用户账户对象
    private func loadUserInfo(account: UserAccount, finished: (isSuccessed: Bool)->()) {
        
        NetworkTools.sharedTools.loadUserInfo(account.uid!) { (result, error) -> () in
            
            if error != nil {
                
                print("加载用户出错了")
                
                finished(isSuccessed: false)
                return
            }
            
            guard let dict = result as? [String: AnyObject] else {
                print("格式错误")
                
                finished(isSuccessed: false)
                return
            }
            
            // dict 一定是一个有值的字典
            // 将用户信息保存
            account.screen_name = dict["screen_name"] as? String
            account.avatar_large = dict["avatar_large"] as? String
            
            // 保存对象 － 会调用对象的 encodeWithCoder 方法
            NSKeyedArchiver.archiveRootObject(account, toFile: self.accountPath)
            
            print(self.accountPath)
            
            // 需要完成回调!!!
            finished(isSuccessed: true)
        }
    }
}
        


